import { defineStore } from 'pinia'
import { useBusinessConfig } from '@/hooks'
import { equ } from '../../package-env'

export interface VHopRoomState {
  room_id: number
  ue4_server_info: string
  app_server_info: string
  ttsa_server_info: string
  janus_server_info: string
  janus_websocket_server_info: string
  pin: string
}

/**
 * 连接数字人所需信息
 */
export interface VHopDigitalState {
  username?: string // digital_name
  appId?: string // vhop_app_id
  appSecret?: string // vhop_app_secret
  roleId?: string // digital_secret_id
  server?: string // server_url
  digitalId?: string // digital_id
  digitalName?: string // digital_name
}


/**
 * 登录信息
 */
export interface UserState {
  /**
   * @description 商户id - 系统内的`app_id`
   * 需在企业管理后台注册后由业务分配给客户
   * 最终在客户请求应用时通过url透传入本应用
   */
  appId: string
  /**
   * 用户ID
   */
  userId: string | number
  /**
   * session_id
   */
  sessionId: string
  /**
   * 连接数字人所需信息
   * TTSA-JS-SDK 参数
   */
  vhopDigital: VHopDigitalState
  /**
   * 登录返回的信息
   */
  token?: string
  /**
   * 大屏端登录标识
   */
  smartToken?: string
  /**
  * 大屏端唤醒词
  */
  wakeUpText?: string
  /**
   * 大屏端信息
   */
  smartApp?: string
  /**
   * 房间信息
   */
  room?: VHopRoomState

  /**
   * 检测是否使用在线视频
   */
  online?: boolean
  /**
   * {Object} 路由参数
   */
  tag?: string
  /**
   * 检测open时是否刷新缓存
   */
  refresh_intention?: boolean
  /**
   * 检测chat时是否使用问答库缓存
   */
  use_faq_cache?: boolean
  wx_config?: LooseObject
  wx_ready?: boolean
}


export const businessData = useBusinessConfig()
const { appId, userId, ...others } = businessData

/**
 * SDK参数
 */
const defaultBusiness = {
  appId: appId,
  userId: userId,
  sessionId: '',
  token: {},
  room: {},
  ...others
}

/**
 * smart端接口登录
 */
const defaultUserInfo = {
  userId: '',
  smartToken: '',
  appId: '',
  enterprise_name: '',
  enterprise_id: '',
  wakeUpText: '',
  smartApp: {},
}

const initDefaultData = () => {
  // 非大屏端
  if (equ !== 'smart') {
    return defaultBusiness
  }

  const localUser = localStorage.getItem('user_info')

  if (localUser) {
    return {
      ...defaultBusiness,
      ...JSON.parse(localUser)
    }
  }
  return { ...defaultUserInfo, ...defaultBusiness }
}

export const useUserStore = defineStore({
  id: 'userStore',
  state: (): UserState => ({
    ...initDefaultData(),
    wx_config: null,
    wx_ready: false
  }),
  actions: {
  },
})
